import dayjs from 'dayjs'

// 获得日期list
export function getDayList(start: string, end: string) {
  let startDay = dayjs(start)
  const endDay = dayjs(end)
  const today = dayjs()
  const length = endDay.diff(startDay, 'day') + 1
  const dayList = []
  for (let index = 0; index < length; index++) {
    dayList.push({
      date: startDay.format('MM/DD'),
      fullDate: startDay.format('YYYY-MM-DD'),
      today: startDay.isSame(today, 'day'),
    })
    startDay = startDay.add(1, 'day')
  }

  const tableRightWidth = document.querySelector('.stock-tag-list')?.clientWidth || 0
  const dayPx = (tableRightWidth - 124) / dayList.length
  let hourPx = dayPx / 24
  // 小时像素最小4px
  if (hourPx < 4) {
    hourPx = 4
  }

  return {
    dayList,
    hourPx,
    dayPx: hourPx * 24,
  }
}

// 一个小时像素
// 计算bar的width和left
export function calcBarPosition(min: string, max: string, start: string, end: string, HOUR_PX: number) {
  // 最小
  const minTime = dayjs(min).startOf('day')
  // 最大
  const maxTime = dayjs(max).endOf('day') //.add(1, 'day')
  // 开始时间
  let startTime = dayjs(start)
  // 结束时间
  let endTime = dayjs(end)
  if (startTime.isAfter(maxTime)) {
    return {
      left: 0,
      width: 0,
    }
  }
  if (startTime.isBefore(minTime)) {
    startTime = minTime
  }
  if (endTime.isAfter(maxTime)) {
    endTime = maxTime
  }
  // 尾部是否是23:59:59 则减1px，保证在格子内
  const grid_tail = endTime.format('HH:mm:ss') == '23:59:59'

  // 距离左侧的小时
  let MarginLeftHour = startTime.diff(minTime, 'hour')
  if (MarginLeftHour < 0) {
    MarginLeftHour = 0
  }
  // 长度小时
  let widthHour = endTime.diff(startTime, 'hour')
  if (endTime.minute()) {
    widthHour++
  }
  if (widthHour < 0) {
    widthHour = 0
  }
  // 转为像素
  const left = MarginLeftHour * HOUR_PX
  const width = widthHour * HOUR_PX - (grid_tail ? 1 : 0)
  return {
    left,
    width,
  }
}

// 处理占用生成columns（columns单词错误应为rows）
// 第一版按时间排序后插空生成columns
// 当前版本 按后端返回的（下单时间）排序；每个占用时间生成一列
const dealCarUseDate = (carUseDate: any) => {
  const columns = []
  // 处理不冲突数据放在第一行
  for (const it of carUseDate) {
    if (it.typeSet.includes(5) || columns.length == 0) {
      columns.push([it])
    } else {
      columns[0].push(it)
    }
  }
  if (columns.length == 0) {
    columns.push([])
  }
  // 删除columns第一个column typeSet 里的 5
  if (columns[0][0]) {
    columns[0][0].typeSet = columns[0][0].typeSet.filter((it: any) => it != 5)
  }
  return columns
}

// 初始化库存数据
// 把车辆的占用的数据转为占用的多列数据
// 冲突数据一列放不下，放下一列，下一列放不下再创建一列（并且按时间排序）
export function ininStockData(list: any) {
  list.forEach((group: any) => {
    group.columnNum = 0
    // 车辆占用列表
    group.columns = []
    group.car_columns = []
    group.left_columns = []
    group.carList.forEach((car: any) => {
      const columns = dealCarUseDate(car.carUseDate)
      group.columns = [...group.columns, ...columns]
      group.columnNum = group.columns.length
      const car_column = Array.from({ length: columns.length }, () => ({
        carId: car.carId,
        licenseNo: car.licenseNo,
      }))
      group.car_columns.push(...car_column)
      group.left_columns.push({
        carId: car.carId,
        licenseNo: car.licenseNo,
        length: columns.length,
      })
    })
  })
  return list
}
